import java.util.LinkedList;
import java.util.Set;

public class MetricClass {

	private int fanOutCount;
	private int fanInCount;
	private int superClassCount; // will be set to 1, if it is not java/lang/Object
	private int fieldCount;
	private int methodCount;
	private int publicMethodCount;
	private int privateMethodCount;
	private int protectedMethodCount;
	
	private Set<String> fanOutClasses;	
	private LinkedList<String> fanIn;
	
	private String name;
	private String superClassName;
	
	private double byteCodeSizeInKb;
	
	/**
	 * A MetricClasss represent extracted information pertaining
	 * to a Java class file.
	 */
	public MetricClass()
	{
		fanOutCount = 0;
		fanInCount = 0;
		fieldCount = 0;
		superClassCount = 0;
		byteCodeSizeInKb = 0f;
	}

	/**
	 * @return Returns the byteCodeSizeInKb.
	 */
	public double getByteCodeSizeInKb() {
		return byteCodeSizeInKb;
	}

	/**
	 * @param byteCodeSizeInKb The byteCodeSizeInKb to set.
	 */
	public void setByteCodeSizeInKb(double byteCodeSizeInKb) {
		this.byteCodeSizeInKb = byteCodeSizeInKb;
	}

	/**
	 * @return Returns the fanInCount.
	 */
	public int getFanInCount() {
		return fanInCount;
	}

	/**
	 * @param fanInCount The fanInCount to set.
	 */
	public void setFanInCount(int fanInCount) {
		this.fanInCount = fanInCount;
	}

	/**
	 * @return Returns the fanOutClasses.
	 */
	public Set<String> getFanOutClasses() {
		return fanOutClasses;
	}

	/**
	 * @param fanOutClasses The fanOutClasses to set.
	 */
	public void setFanOutClasses(Set<String> fanOutClasses) {
		this.fanOutClasses = fanOutClasses;
	}

	/**
	 * @return Returns the fanOutCount.
	 */
	public int getFanOutCount() {
		return fanOutCount;
	}

	/**
	 * @param fanOutCount The fanOutCount to set.
	 */
	public void setFanOutCount(int fanOutCount) {
		this.fanOutCount = fanOutCount;
	}

	/**
	 * @return Returns the fieldCount.
	 */
	public int getFieldCount() {
		return fieldCount;
	}

	/**
	 * @param fieldCount The fieldCount to set.
	 */
	public void setFieldCount(int fieldCount) {
		this.fieldCount = fieldCount;
	}

	/**
	 * @return Returns the name.
	 */
	public String getName() {
		return name;
	}

	/**
	 * @param name The name to set.
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 * @return Returns the superClassCount.
	 */
	public int getSuperClassCount() {
		return superClassCount;
	}

	/**
	 * @param superClassCount The superClassCount to set.
	 */
	public void setSuperClassCount(int superClassCount) {
		this.superClassCount = superClassCount;
	}

	/**
	 * @return Returns the superClassName.
	 */
	public String getSuperClassName() {
		return superClassName;
	}

	/**
	 * @param superClassName The superClassName to set.
	 */
	public void setSuperClassName(String superClassName) {
		this.superClassName = superClassName;
	}

	/**
	 * @return Returns the methodCount.
	 */
	public int getMethodCount() {
		return methodCount;
	}

	/**
	 * @param methodCount The methodCount to set.
	 */
	public void setMethodCount(int methodCount) {
		this.methodCount = methodCount;
	}

	/**
	 * @return Returns the privateMethodCount.
	 */
	public int getPrivateMethodCount() {
		return privateMethodCount;
	}

	/**
	 * @param privateMethodCount The privateMethodCount to set.
	 */
	public void setPrivateMethodCount(int privateMethodCount) {
		this.privateMethodCount = privateMethodCount;
	}

	/**
	 * @return Returns the protectedMethodCount.
	 */
	public int getProtectedMethodCount() {
		return protectedMethodCount;
	}

	/**
	 * @param protectedMethodCount The protectedMethodCount to set.
	 */
	public void setProtectedMethodCount(int protectedMethodCount) {
		this.protectedMethodCount = protectedMethodCount;
	}

	/**
	 * @return Returns the publicMethodCount.
	 */
	public int getPublicMethodCount() {
		return publicMethodCount;
	}

	/**
	 * @param publicMethodCount The publicMethodCount to set.
	 */
	public void setPublicMethodCount(int publicMethodCount) {
		this.publicMethodCount = publicMethodCount;
	}

	/**
	 * @return Returns the fanIn.
	 */
	public LinkedList<String> getFanIn() {
		return fanIn;
	}

	/**
	 * @param fanIn The fanIn to set.
	 */
	public void setFanIn(LinkedList<String> fanIn) {
		this.fanIn = fanIn;
	}
}
